Fivetranのdbt Transformationを「Scheduled in Code」の方法で試してみた
さがらです。
Fivetranではdbtで定義したsqlを実行できる「dbt Transformation」という機能があるのですが、Fivetran上でスケジュール実行する方法が2023年3月20日時点で「Scheduled in Fivetran」と「Scheduled in Code」の2種類あります。
今回、dbt上でYAMLファイルを作成しスケジュールを定義する「Scheduled in Code」の方法について試してみたので、本記事でその内容をまとめてみます。
事前準備
Fivetranの設定
事前に、Googleスプレッドシートコネクタを用いて、Snowflakeへデータをロードしておきます。
dbt projectの作成
まず、dbt_project.yml
をリポジトリのルート直下に配置して作成します。dbt Cloudで開発する場合は、Gitリモートリポジトリはdbtホストでないものを使用しましょう。
続いて、上述のorders
テーブルを参照するSourceを定義します。dbt Transformationを使う上で、Sourceの定義は必須です。
models/sources.yml
version: 2 sources: - name: jaffle database: SAGARA_FIVETRAN_DEMO_DB schema: JAFFLE_SHOP_FROM_GOOGLE_SHEETS tables: - name: orders
このSourceを参照するModelを2つ定義し、MainブランチにMergeしておきます。
models/orders_by_month.sql
select date_trunc(month,order_date) as order_yearmonth, status, count(*) as order_count from {{ source('jaffle','orders') }} group by 1,2
models/orders_by_year.sql
select date_trunc(year,order_date) as order_yearmonth, status, count(*) as order_count from {{ source('jaffle','orders') }} group by 1,2
加えて、deployment.yml
をdbt_project.yml
と同じ階層に、下記のように定義します。「Scheduled in Code」の方法では、deployment.yml
が必須となり、どのコマンドをどのスケジュールで実行するかを事前に定義しておく必要があります。
以下のコードは、公式Docのサンプルを参考に定義してみました。
deployment.yml
jobs: - name: daily schedule: 0 12 * * * # This example will run every day at 12:00pm steps: - name: run models command: dbt run - name: test models command: dbt test
Fivetran上での設定
設定画面の起動
まず、Fivetran上でTransformations
を押し、対象のDestinationを選択します。
続いて、Connect your dbt project
を選択します。これでdbt Transformationの設定画面が立ち上がります。
Fivetranによる対象のGitリポジトリへのSSHアクセスを許可する
Fivetranが対象のdbt projectを管理するGitリポジトリへのSSHアクセスを許可させるための設定を行っていきます。
dbt Transformationの設定画面において、Public Key
をコピーします。
次に、GitHubにおいて対象のリポジトリのSeetings
からDeploy keys
を開き、Add deploy key
を押します。
Title
に任意の名称を入力した後、Key
にFivetranの画面でコピーしたPublic Keyを貼り付けて、Add key
を押します。Allow write access
はチェック不要です。
dbt Transformationの設定画面に戻って設定の続き
以下の情報を入力後、設定画面末尾のSave & Test
を押します。
Repository URL
:対象のリポジトリについてSSHアクセス用のURLを貼るDefault Schema Name
:対象のdbt projectによってオブジェクトが生成される先のスキーマ名を入力
この後、対象のリポジトリの情報の読み取りに5~10分ほど必要としますが、その後でFivetranのTransformations
の画面からdeployment.yml
で定義したジョブを確認できるようになります。
Fivetran上でdbt Transformationのジョブを確認
ではFivetran上で、deployment.yml
で定義したジョブを確認してみます!
確認方法は簡単で、Fivetranの画面でTransformations
から対象のDestinationを選択すれば、すぐに確認可能です!
対象のジョブをクリックすると、ジョブの実行履歴や登録されているスケジュール時刻などを確認可能です。
定義したdbt Transformationのジョブをマニュアル実行してみる
最後に、定義したdbt Transformationのジョブを一度マニュアル実行してみます。
対象のジョブの詳細画面に移動し、右上のRun Now
を押します。
ジョブが上手く実行すると、Run log
タブに履歴が出てきます。
ログをクリックすると、実行されたコマンドが出てきます。
最後に
Fivetranのdbt Transformationを「Scheduled in Code」の方法で試してみました。
「Scheduled in Fivetran」と比べた時の利点は、やはりコードで各種スケジュールを定義出来るところかなと思いました。一方で、「Scheduled in Code」の方法だとFivetranでのロード直後にdbtのModelを実行することはできないため、その点だけ注意です!
おまけ
「Scheduled in Fivetran」の方法を用いたdbt Transformationの定義も別のブログで行っているため、ぜひご覧ください!